package com.ruoyi.web.controller.decision;

import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;

import com.ruoyi.decision.domain.*;
import com.ruoyi.decision.service.IStrategyService;
import com.ruoyi.decision.service.ITaskService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.decision.service.IUserTaskStrategyService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;

/**
 * 用户，预案，策略中间Controller
 * 
 * @author zbw
 * @date 2022-08-19
 */
@RestController
@RequestMapping("/decision/usertaskstrategy")
public class UserTaskStrategyController extends BaseController
{
    @Autowired
    private IUserTaskStrategyService userTaskStrategyService;
    @Autowired
    private IStrategyService strategyService;
    @Autowired
    private ITaskService taskService;

    /**
     * 查询优化策略模型配置列表中的策略id
     */
    @PreAuthorize("@ss.hasPermi('decision:usertaskstrategy:taskId')")
    @GetMapping("/taskId/{taskId}")
    public TableDataInfo cs(@PathVariable("taskId")String taskId)
    {
        startPage();

        UserTaskStrategy userTaskStrategy = new UserTaskStrategy();
        userTaskStrategy.setTaskId(taskId);

        List<UserTaskStrategy> list = userTaskStrategyService.selectUserTaskStrategyList(userTaskStrategy);

        List<Strategy> strategies = strategyService.selectStrategyList(null);
        List<Strategy> strategies1 = new ArrayList<>();
        for (Strategy strategy : strategies) {
            for (UserTaskStrategy strategy1 : list) {
                if (strategy1.getStrategyId().equals(strategy.getStrategyId())){
                    strategies1.add(strategy);
                }
            }
        }


        return getDataTable(strategies1);
    }

    /**
     * 查询用户，预案，策略中间列表
     */
    @PreAuthorize("@ss.hasPermi('decision:usertaskstrategy:list')")
    @GetMapping("/list")
    public TableDataInfo list(UserTaskStrategy userTaskStrategy)
    {
        startPage();
        List<UserTaskStrategy> list = userTaskStrategyService.selectUserTaskStrategyList(userTaskStrategy);
        return getDataTable(list);
    }

    /**
     * 导出用户，预案，策略中间列表
     */
    @PreAuthorize("@ss.hasPermi('decision:usertaskstrategy:export')")
    @Log(title = "用户，预案，策略中间", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, UserTaskStrategy userTaskStrategy)
    {
        List<UserTaskStrategy> list = userTaskStrategyService.selectUserTaskStrategyList(userTaskStrategy);
        ExcelUtil<UserTaskStrategy> util = new ExcelUtil<UserTaskStrategy>(UserTaskStrategy.class);
        util.exportExcel(response, list, "用户，预案，策略中间数据");
    }

    /**
     * 获取用户，预案，策略中间详细信息
     */
    @PreAuthorize("@ss.hasPermi('decision:usertaskstrategy:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return AjaxResult.success(userTaskStrategyService.selectUserTaskStrategyById(id));
    }

    /**
     * 新增用户，预案，策略中间
     */
    @PreAuthorize("@ss.hasPermi('decision:usertaskstrategy:add')")
    @Log(title = "用户，预案，策略中间", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody UserTaskStrategy userTaskStrategy)
    {
        if (userTaskStrategy.getUserId()!=null){
            UserTaskStrategy userid = new UserTaskStrategy();
            userid.setUserId(userTaskStrategy.getUserId());
            List<UserTaskStrategy> taskStrategyList = userTaskStrategyService.selectUserTaskStrategyList(userid);
            for (UserTaskStrategy taskStrategy : taskStrategyList) {
                if (taskStrategy.getTaskId().equals(userTaskStrategy.getTaskId())){
                    userTaskStrategyService.deleteUserTaskStrategyById(taskStrategy.getId());
                }
            }
            Task task = new Task();
            task.setTaskId(userTaskStrategy.getTaskId());
            task.setTaskState(1);
            taskService.updateTask(task);
            return toAjax(userTaskStrategyService.insertUserTaskStrategy(userTaskStrategy));

        }
        return toAjax(0);
    }

    /**
     * 修改用户，预案，策略中间
     */
    @PreAuthorize("@ss.hasPermi('decision:usertaskstrategy:edit')")
    @Log(title = "用户，预案，策略中间", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody UserTaskStrategy userTaskStrategy)
    {
        return toAjax(userTaskStrategyService.updateUserTaskStrategy(userTaskStrategy));
    }

    /**
     * 删除用户，预案，策略中间
     */
    @PreAuthorize("@ss.hasPermi('decision:usertaskstrategy:remove')")
    @Log(title = "用户，预案，策略中间", businessType = BusinessType.DELETE)
	@DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(userTaskStrategyService.deleteUserTaskStrategyByIds(ids));
    }
}
